/*
 * Copyright 2000-2020 ALPHA LAB.Inc All Rights Reserved.
 */
package com.alphalab.framework.role;

import java.io.Serializable; 
import java.util.List; 
import com.alphalab.framework.domain.IValueObject;  

/**
 * 定义GeneralRole的基本方法.
 * 与IEntityDao保持一致
 * @author allen 
 * @param <VO>
 * @version 1.0.0 2017年8月16日
 */
public interface IGeneralRole<VO extends IValueObject> extends IRole { 
	
	/**
	 * 保存VO对象.
	 * @param valueObject VO对象
	 * @return int
	 */
	int save(VO valueObject);
	
	/**
	 * 保存VO对象集合.
	 * @param valueObjects VO对象集合
	 * @return int
	 */
	int saveList(List<VO> valueObjects);	
	
	/**
	 * 删除VO对象.
	 * @param valueObject VO对象
	 * @return int
	 */
	int delete(VO valueObject);
	
	/**
	 * 删除VO对象.
	 * @param id 主键
	 * @return int
	 */
	int deleteById(Serializable id);
	
	/**
	 * 删除VO对象集合.
	 * @param valueObjects VO对象集合
	 * @return int
	 */
	int deleteList(List<VO> valueObjects);	
	
	/**
	 * 更新VO对象.
	 * @param valueObject VO对象
	 * @return int
	 */
	int update(VO valueObject);
	
	/**
	 * 更新VO对象集合.
	 * @param valueObjects VO对象集合
	 * @return int
	 */
	int updateList(List<VO> valueObjects);	
	
	/**
	 * 保存或更新VO对象.
	 * @param valueObject VO对象
	 * @return int
	 */
	int saveOrUpdate(VO valueObject);	
	
	/**
	 * 保存或更新VO对象集合.
	 * @param valueObjects VO对象集合
	 * @return int
	 */
	int saveOrUpdateList(List<VO> valueObjects);		
	
	/**
	 * 根据主键返回对象.
	 * @param id 主键
	 * @return VO
	 */
	VO find(Serializable id); 
	
	/**
	 * 根据sql执行并返回结果，需加事务才能生效.
	 * @param sql 完整的原生sql语句
	 * @return result 影响的行数
	 */
	int excecuteBySql(String sql);  

}
